﻿using Entity;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IService
{
    public interface ITransferOrderService
    {
        // 修正：添加ioStatus参数，匹配控制器调用
        Task<List<TransferOrderDTO>> GetTransferOrdersAsync(
            string transnoNo,
            string documentStatus,
            string ioStatus, // 新增：出入库状态参数
            DateTime? startDate,
            DateTime? endDate,
            int pageIndex,
            int pageSize);

        // 修正：添加ioStatus参数，匹配控制器调用
        Task<int> GetTransferOrdersCountAsync(
            string transnoNo,
            string documentStatus,
            string ioStatus, // 新增：出入库状态参数
            DateTime? startDate,
            DateTime? endDate);

        // 新增：删除单条记录方法（控制器调用）
        Task<bool> DeleteAsync(int transferOrderId);

        // 新增：批量删除方法（控制器调用）
        Task<bool> BatchDeleteAsync(List<int> ids);

        // 补充：根据ID获取调拨单（基础方法）
        Task<TransferOrderDTO> GetTransferOrderByIdAsync(int id);

        // 核心修复1：添加带事务的重载（解决CS1501）
        Task<TransferOrderDTO> GetTransferOrderByIdAsync(int id, DbTransaction transaction);

        // 补充：创建调拨单（控制器调用）
        Task<bool> CreateTransferAsync(TransferOrderCreateDTO dto);

        // 补充：获取调拨单明细（基础方法）
        Task<List<TransferOrderDetailDTO>> GetTransferOrderDetailsAsync(int transferOrderId);

        // 核心修复2：添加带事务的重载（解决CS1501）
        Task<List<TransferOrderDetailDTO>> GetTransferOrderDetailsAsync(int transferOrderId, DbTransaction transaction);

        Task<bool> AuditAsync(int transferOrderId, string auditor);

        /// <summary>
        /// 根据仓库ID获取仓库位列表
        /// </summary>
        /// <param name="warehouseId">仓库ID</param>
        /// <returns>仓库位列表（包含ID和名称等信息）</returns>
        Task<List<StorageLocationEntity>> GetStorageLocationsByWarehouseAsync(int warehouseId);

        Task<bool> AuditAsync(int transferOrderId, string auditor, string auditResult);

        Task<List<TransferOrderExportDTO>> GetExportDataAsync(
            string transnoNo, string documentStatus, string ioStatus,
            DateTime? startDate, DateTime? endDate);

        /// <summary>
        /// 更新调拨单状态
        /// </summary>
        /// <param name="id">调拨单ID</param>
        /// <param name="documentStatus">单据状态</param>
        /// <param name="outboundStatus">出库状态</param>
        /// <param name="storageStatus">入库状态</param>
        Task<bool> UpdateStatusAsync(int id, string documentStatus, string outboundStatus, string storageStatus);

        // 新增双参数重载声明
        Task<bool> CancelAsync(int transferOrderId, string operatorUser);

        // 新增带事务的重载方法（核心）
        Task<bool> AuditAsync(int transferOrderId, string auditor, string auditResult, DbTransaction transaction);

        Task<bool> UpdateStatusAsync(int id, string documentStatus, string outboundStatus, string storageStatus, DbTransaction transaction);
    }
}